package org.yiqixue.accounts.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.yiqixue.accounts.entity.Transaction;
import org.yiqixue.accounts.repository.TransactionRepository;
import org.yiqixue.accounts.dto.TransactionDTO;

import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service // 这个类是服务层，负责业务逻辑
public class TransactionService {

    @Autowired
    private TransactionRepository transactionRepository; // 注入 TransactionRepository，用于操作数据库

    // 创建或更新交易
    public Transaction saveTransaction(Transaction transaction) {
        return transactionRepository.save(transaction); // 调用 save 方法保存或更新交易
    }

    // 获取所有交易
    public List<Transaction> getAllTransactions() {
        return transactionRepository.findAll(); // 返回所有交易记录
    }

    // 根据 ID 获取交易
    public Optional<Transaction> getTransactionById(Long id) {
        return transactionRepository.findById(id); // 根据 ID 查询交易
    }

    // 根据 ID 删除交易
    public void deleteTransaction(Long id) {
        transactionRepository.deleteById(id); // 根据 ID 删除交易记录
    }

    // 根据手机号、交易类型和当前日期查询当日交易
    public List<TransactionDTO> getTransactionsByPhoneAndType(String phoneNumber, String type) {
        Date today = new Date(); // 获取当前日期

        // 查询所有的交易
        List<Transaction> transactions = transactionRepository.findAll();

        // 筛选符合条件的交易
        List<TransactionDTO> result = transactions.stream()
                .filter(transaction ->
                        transaction.getAccount().getPhoneNumber().equals(phoneNumber) && // 检查手机号
                                transaction.getType().equals(type) && // 检查交易类型
                                transaction.getTransactionDate().getDate() == today.getDate() // 检查交易日期是否为今天
                )
                .map(transaction -> new TransactionDTO(
                        transaction.getTransactionID(),
                        transaction.getAmount(),
                        transaction.getTransactionDate(),
                        transaction.getDescription(),
                        transaction.getStatus(),
                        transaction.getType()
                ))
                .collect(Collectors.toList());

        return result;
    }
}
